Estimating the benefit of green infrastructure to urban ecosystems: A synthesis and case-study



Alessandro Filazzola

Scott MacIvor - UTSC

Namrata Shrestha - TRCA

Glenn Milner - OCC

library(tidyverse)
library(PRISMAstatement)

Global urbanization continues unabated, with more than 50% of the worlds’ population living in cities. Cities are conventionally viewed as a threat to local biodiversity because natural habitat is replaced with development. However, more recently, there is greater acknowledgement from the public and private sectors that supporting local environments sustains critical ecosystem services, which in turn improves human health and biodiversity conservation. Consequently, urban planning and design has shifted towards green infrastructure (GI), such as green roofs and retention ponds, to increase connections between city and nature in an era of climate change. The contribution of GI to some ecosystem services has been proven (e.g. stormwater management, building cooling), but the contribution to biodiversity conservation remains unspecified. Using a systematic literature review, this project will (i) determine effect estimates that relate different GI types and characteristics to the impacts on natural systems, and (ii) compile relevant data to develop different implementation scenarios GI for Toronto and region. This study will inform natural system planning and improve quantification of GI on urban ecosystems. Findings from this research will have global ramifications that allow city planners to optimize GI implementation for sustainable development and decrease the impacts of cities on natural systems.

Objectives

  1. A meta-analysis of the literature summarizing the effect of green infrastructure on natural systems.
  2. Using Toronto, Ontario as a case study, develop a tool that can communicates the effectiveness of different GI implementation for biodiversity conservation.

Expected Deliverables

  1. A peer-reviewed journal article that is a meta-analysis from objective 1.
  2. A tool or data analysis that projects different scenarios of green infrastructure implementation for the City of Toronto.

Timeline

date task
June 18 Begin meeting with staff and MacIvor lab to set out workplan
June 25 Begin literature review and data extraction
July 2 Aggregate available data for GI analysis in Toronto
July 3 Complete meetings with TRCA staff on relevant considerations for the project
July 9 Determine important parameters for modelling GI in Toronto
August 20 Complete collection and review of relevant articles
September 3 Conduct meta-analysis on available data
September 10 Propose candidate models for quantifying GI effects for natural systems
Sept 24 Model validation and begin writting manuscript
Oct 15 Complete a draft of manuscript and finalize model

Revise list

search1.1 <- read.csv("data/WOS-lit.csv")
search1.2 <- read.csv("data/WoSPart3-July_4_2018.csv")
net.difference <- anti_join(search1.2, search1.1, by = "DOI")
net.difference <- net.difference %>% select(Title, DOI) #to simplify for a look
nrow(net.difference) #count of number of differences from consecutive search
## [1] 182
## 182 papers to be added by including revised terms
## Select those articles and join with other dataset
net.difference <- anti_join(search1.2, search1.1, by = "DOI")

updated.search <- rbind(search1.1, net.difference)

#write.csv(updated.search, "data/WOS-lit.updated.csv")

Adding revised terms from July 3rd meeting added 182 papers Total articles returned = 1,053 (as of July 2018)

## Adding terms for naturalized pond and pollinator garden
search1.2 <- read.csv("data/WOS-lit.updated.csv")
search1.3 <- read.csv("data/WoSPart4-July_11_2018.csv")
net.difference <- anti_join(search1.3, search1.2, by = "DOI")
net.difference <- net.difference %>% select(Title, DOI) #to simplify for a look
nrow(net.difference) #count of number of differences from consecutive search
## [1] 0
## 213 papers to be added by including revised terms
## Select those articles and join with other dataset
net.difference <- anti_join(search1.3, search1.2, by = "DOI")

updated.search <- rbind(search1.2, net.difference)

#write.csv(updated.search, "data/WOS-lit.updated.csv")

Adding revised terms from July 3rd meeting added 213 papers Total articles returned = 1,224 (as of July 2018)

Literature Review - 2. Sort

This steps includes a. checking for duplicating, b. reviewing each instance for relevancy, c. consistently identifying and documenting exclusion criteria. Outcomes include a list of publications to be used for synthesis, a library of pdfs, and a PRISMA report to ensure the worflow is transparent and reproducible. Papers were excluded with the following characteristics:

  • Not emperical study (e.g. review, book chapter)
  • Irrelevant categories (e.g. political science, law, sports tourism, art)
evidence <- read.csv("data/evidence.csv")

excludes <- evidence %>% group_by(reason) %>% count(exclude) %>% filter(reason!="")
ggplot(excludes, aes(x=reason, y=n)) + geom_bar(stat="identity") + coord_flip()

Papers processed - Progress

## Completed so far
prog <- sum(evidence$exclude!="")
prog
## [1] 1266
## Remaining
total <- nrow(evidence)
total
## [1] 1266
setTxtProgressBar(txtProgressBar(0,total,  style = 3), prog)
## 
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=================================================================| 100%

Initial pass for relevant papers complete.

GI.type <- evidence %>% group_by(GI.type) %>% count(exclude) %>% filter(GI.type!="")
ggplot(GI.type, aes(x=GI.type, y=n)) + geom_bar(stat="identity") + coord_flip()

Representations of relevant GI types found in papers

Prisma report

## total number of papers found
nrow(evidence)
## [1] 1266
## number of papers found outside of WoS
other <- read.csv("data/other.sources.csv")
nrow(other)
## [1] 28
## number of articles excluded
excludes <- evidence %>% filter(exclude=="y")
nrow(excludes)
## [1] 1123
## relevant papers
review <- evidence %>% filter(exclude!="y")
nrow(review)
## [1] 143
## papers for meta
meta <- evidence %>% filter(meta.=="yes")
nrow(meta)
## [1] 117
prisma(found = 1255,
       found_other = 9,
       no_dupes = 1264,
       screened = 1264,
       screen_exclusions = 1123,
       full_text = 141,
       full_text_exclusions = 0,
       qualitative = 141, 
       quantitative = 115,
       width = 800, height = 800)
## Loading required namespace: DiagrammeR

Literature Review - 3. Synthesis

The research questions we are exploring:

  1. What are the patterns of GI studies globally
  2. How does green infrastructure compare to conventional “grey” equivalents (e.g. green roof to conventional roof)?
  3. How does green infrastructure compare to its natural equivalents (e.g. retention ponds )?
  4. What features of green infrstructure can improve the quality of natural systems?

Patterns of GI Studies Globally

require(ggmap)
###  Start with base map of world
mp <- NULL
mapWorld <- borders("world", colour="gray50", fill="gray50") # create a layer of borders
mp <- ggplot() +   mapWorld

## colorblind-friendly palette
cbPalette <- c("#999999", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7","#000000")

meta <- read.csv("data//evidence.csv")
meta <- subset(meta, GI.type!="")

## plot points on top
mp <- mp+ geom_point(data=meta , aes(x=lon, y=lat, color=GI.type), size=2) + scale_colour_manual(values=cbPalette)+
    theme(legend.position="bottom", text = element_text(size=20))
mp

## Number of studies extracted from online data
occurdat<-list.files("data//MS.data",pattern=".csv$",full=T)
length(occurdat)
## [1] 72
## 70 Studies found with usable data for synthesis

Green infrastructure comparison to conventional

## load master datasets
meta <- read.csv("data//Master.GI.Datasets.csv")
## Omit repo 3 and 9 because of data issues
meta <- meta %>% filter(Study != "repo-3" & Study != "repo-9") 


## Load packages and functions
library(reshape2)
library(metafor)
source("meta.eval.r") ## Multiple aggregate


## Create Unique identifier column
meta2 <- meta
meta2[,"UniqueSite"] <- paste(meta2$Study, meta2$Taxa,  meta$Estimate, sep="-")


## Use function to extract summary statistics for comparisons
## meta.eval  arguments are (meta.data, compare, ids , stats)
Infra.compare <- meta.eval(meta2, Infrastructure, UniqueSite, Stat )

## Combine the lists into same dataframe
## Rename Columns in second dataframe
Infra.stat <- Infra.compare[[2]] ## extracted statistics 
names(Infra.stat) <- c("UniqueSite","green_mean","green_sd","grey_mean","grey_sd","green_n","grey_n") ## rename columns to match
Infra.raw <- Infra.compare[[1]] ## calculated statistics from raw values

## Join two dataframes
meta.stat <- rbind(Infra.raw, Infra.stat[, names(Infra.raw)])
meta.stat <- meta.stat[-13,] ## drop pollen limitation because no SD

meta.ready <- escalc(n1i = grey_n, n2i = green_n, m1i = grey_mean, m2i = green_mean, sd1i = grey_sd, sd2i = green_sd, data = meta.stat, measure = "SMD", append = TRUE)

#random-effects meta-analysis for green infrastructure vs grey
m1 <- rma(yi, vi, data = meta.ready)
summary(m1) 
## 
## Random-Effects Model (k = 18; tau^2 estimator: REML)
## 
##   logLik  deviance       AIC       BIC      AICc  
## -44.7991   89.5982   93.5982   95.2646   94.4554  
## 
## tau^2 (estimated amount of total heterogeneity): 9.4685 (SE = 3.3804)
## tau (square root of estimated tau^2 value):      3.0771
## I^2 (total heterogeneity / total variability):   99.05%
## H^2 (total variability / sampling variability):  105.65
## 
## Test for Heterogeneity: 
## Q(df = 17) = 211.5795, p-val < .0001
## 
## Model Results:
## 
## estimate      se     zval    pval    ci.lb   ci.ub   
##  -1.2895  0.7404  -1.7418  0.0816  -2.7406  0.1616  .
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Produce a forest plot to determine the effect sizes for each study
forest(m1, slab = meta.stat$UniqueSite)

## Check for publication bias
## The symetrical distriubtion suggests there is no publication bias
funnel(m1)

Green infrastructure comparison to natural

## Create Unique identifier column
meta2 <- meta
meta2[,"UniqueSite"] <- paste(meta2$Study, meta2$Taxa,  meta$Estimate, sep="-")
meta2[,"Urban.type"] <- ifelse(meta2$Habitat=="natural", "natural", "urban")

## Use function to extract summary statistics for comparisons
## meta.eval  arguments are (meta.data, compare, ids , stats)
nat.compare <- meta.eval(meta2, Urban.type, UniqueSite, Stat )

## Combine the lists into same dataframe
## Rename Columns in second dataframe
nat.stat <- nat.compare[[2]] ## extracted statistics 
names(nat.stat) <- c("UniqueSite","natural_mean","natural_sd","urban_mean","urban_sd","natural_n","urban_n") ## rename columns to match
nat.raw <- nat.compare[[1]] ## calculated statistics from raw values

## Join two dataframes
meta.stat <- rbind(nat.raw, nat.stat[, names(nat.raw)])
meta.stat <- meta.stat[-13,] ## drop pollen limitation because no SD

meta.ready <- escalc(n1i = urban_n, n2i = natural_n, m1i = urban_mean, m2i = natural_mean, sd1i = urban_sd, sd2i = natural_sd, data = meta.stat, measure = "SMD", append = TRUE)

#random-effects meta-analysis for green infrastructure vs grey
m1 <- rma(yi, vi, data = meta.ready)
summary(m1) 
## 
## Random-Effects Model (k = 27; tau^2 estimator: REML)
## 
##   logLik  deviance       AIC       BIC      AICc  
## -29.3216   58.6432   62.6432   65.1594   63.1649  
## 
## tau^2 (estimated amount of total heterogeneity): 0.1271 (SE = 0.0714)
## tau (square root of estimated tau^2 value):      0.3566
## I^2 (total heterogeneity / total variability):   59.13%
## H^2 (total variability / sampling variability):  2.45
## 
## Test for Heterogeneity: 
## Q(df = 26) = 63.5231, p-val < .0001
## 
## Model Results:
## 
## estimate      se     zval    pval    ci.lb   ci.ub   
##  -0.1518  0.1036  -1.4649  0.1429  -0.3549  0.0513   
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Produce a forest plot to determine the effect sizes for each study
forest(m1, slab = meta.stat$UniqueSite)

## Check for publication bias
## The symetrical distriubtion suggests there is no publication bias
funnel(m1)

Case Study - 4. Green infrastructure Mapping

gf.data <- read.csv("data//GI.data//GreenRoofGeocoded.csv")
garden.data <- read.csv("data//GI.data//ComGardensdata.csv")
pond.data <- read.csv("data//GI.data//RetentionPondsGPS.csv")

## Extract coordinates only for GI
gf.data <- gf.data[,c("lon","lat")]
garden.data <- garden.data[,c("lon","lat")]
pond.data <- pond.data[,c("lon","lat")]

## combine into single dataset
GI.data <- rbind(gf.data,garden.data, pond.data)
## add column for data type
GI.data[,"GI.type"] <- c(rep("Green Roof",nrow(gf.data)),rep("Community Garden",nrow(garden.data)),rep("Retention Pond", nrow(pond.data)))

## interactive map
library(leaflet)
## Warning: package 'leaflet' was built under R version 3.4.4
m <- leaflet(data=GI.data) %>%
  addTiles() %>%  
   addCircleMarkers(~lon, ~lat, color =  ifelse(GI.data$GI.type == "Retention Pond", 'blue', 'red'), radius=5)
m